     /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.prod.mbean;

import com.brain.conf.dto.CentroCostosDto;
import com.brain.conf.manager.CentroCostosManager;
import com.brain.core.configuracion.WebServletContextListener;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.BitacoraManager;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.mbean.ApplicationMBean;
import com.brain.core.view.mbean.ArchivoMBean;
import com.brain.core.view.mbean.GenericMBean;
import com.brain.core.view.mbean.SessionMBean;
import com.brain.prod.dto.ProcesoDetaDto;
import com.brain.prod.dto.ProcesoDto;
import com.brain.prod.dto.PuestoTrabajoDto;
import com.brain.prod.dto.UtillajeDto;
import com.brain.prod.manager.ProcesoDetaManager;
import com.brain.prod.manager.ProcesoManager;
import com.brain.prod.manager.PuestoTrabajoManager;
import com.brain.prod.manager.UtillajeManager;
import com.brain.sgc.dto.PuestoDto;
import com.brain.sgc.manager.PuestoManager;
import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Guillermo
 */
@Controller("procesoMBean")
@Scope("session")
public class ProcesoMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(ProcesoMBean.class);
    
    @Resource
    private ProcesoManager manager;
    
    @Resource
    private ProcesoDetaManager detaManager;
    
    @Autowired
    private ApplicationMBean applicationMBean;
    
    @Autowired
    private SessionMBean sessionMBean;
    
    @Resource
    private RecursosManager recursosManager;
    
    @Resource
    private BitacoraManager bitacoraManager;   
    
    @Resource
    private ArchivoMBean archivoMBean;
    
    private List<ProcesoDto> lista;
    private ProcesoDto dto;
    private ProcesoDto dtoFiltro;
    private ProcesoDetaDto detaDto;
    private String keyTitulo = "form.proceso.panel";
    private String keyDetalleEntidad = "key.entidad.proceso.deta";
    private String tituloDetalle;
    private List<CentroCostosDto> listaCentroCosto;
    private List<PuestoTrabajoDto> listaPuestoTrabajo;
    private List<UtillajeDto> listaUtillaje;

    public String iniciar() {
        this.dtoFiltro = new ProcesoDto();        
        this.dtoFiltro.setDescripcion("");
        this.dtoFiltro.setDescripcionCorta("");
        this.dtoFiltro.setEstado(Boolean.TRUE);
        this.lista = null;
        return this.manager.getUrlLista();
    }

    public void buscar(ActionEvent ae) {
        try {
            this.lista = this.manager.obtenerProceso(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error(ex);
        }
    }

    public String nuevo() {
        sessionMBean.setAccion(applicationMBean.getNuevo());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.dto = this.manager.inicializar();
        this.detaDto = this.detaManager.inicializar();
        return this.manager.getUrl();
    }
    
    public void nuevoDetalle() {
        sessionMBean.setAccionDetalle(applicationMBean.getNuevo());
        this.tituloDetalle = recursosManager.construirTitulo(keyDetalleEntidad, sessionMBean.getAccionDetalle());
        this.detaDto = this.detaManager.inicializar();
        this.detaDto.setProcesoDto(this.dto);
    }

    public String editar() {
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.detaDto = this.detaManager.inicializar();
        return this.manager.getUrl();
    }
    
    public void editarDetalle() {
        sessionMBean.setAccionDetalle(applicationMBean.getEditar());
        this.tituloDetalle = recursosManager.construirTitulo(keyDetalleEntidad, sessionMBean.getAccionDetalle());
        if (this.detaDto.getId() != null) {
            try {
                this.detaDto = this.detaManager.obtenerPorId(this.detaDto.getId());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    public String ver() {
        sessionMBean.setAccion(applicationMBean.getVer());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.detaDto = this.detaManager.inicializar();
        return this.manager.getUrl();
    }
    
    public void verDetalle() {
        sessionMBean.setAccionDetalle(applicationMBean.getVer());
        this.tituloDetalle = recursosManager.construirTitulo(keyDetalleEntidad, sessionMBean.getAccionDetalle());
        if (this.detaDto.getId() != null) {
            try {
                this.detaDto = this.detaManager.obtenerPorId(this.detaDto.getId());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    public String guardar() {        
        if (this.manager.guardar(this.dto) != null) {            
            this.editar();
        }        
        return null;
    }
    
    public void guardarDetalle() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;
        try {
            if (this.detaManager.guardar(this.detaDto) != null) {
                this.dto = this.manager.obtenerPorId(this.dto.getId());
            }
            else {
                resultado = false;
            }
        } catch (DAOException e) {
            showError("ERROR_SISTEMA", e.getMessage());
            logger.error(e);
        }
        
        context.addCallbackParam("CallbackParam", resultado);
    }
    
    public String verBitacora() {
        bitacoraManager.cargarBitacoraEntidad(manager.getIdEntidad(), this.dto.getId());
        return null;
    }

    public String retroceder() {
        buscar(null);
        return this.manager.getUrlLista();
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public ProcesoDto getDto() {
        return dto;
    }

    public void setDto(ProcesoDto dto) {
        this.dto = dto;
    }

    public ProcesoDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(ProcesoDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public List<ProcesoDto> getLista() {
        return lista;
    }

    public void setLista(List<ProcesoDto> lista) {
        this.lista = lista;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        ProcesoMBean.logger = logger;
    }  

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }
    
    public ArchivoMBean getArchivoMBean() {
        return archivoMBean;
    }

    public void setArchivoMBean(ArchivoMBean archivoMBean) {
        this.archivoMBean = archivoMBean;
    }

    public ProcesoManager getManager() {
        return manager;
    }

    public void setManager(ProcesoManager manager) {
        this.manager = manager;
    }

    public BitacoraManager getBitacoraManager() {
        return bitacoraManager;
    }

    public void setBitacoraManager(BitacoraManager bitacoraManager) {
        this.bitacoraManager = bitacoraManager;
    }

    public ProcesoDetaManager getDetaManager() {
        return detaManager;
    }

    public void setDetaManager(ProcesoDetaManager detaManager) {
        this.detaManager = detaManager;
    }

    public ProcesoDetaDto getDetaDto() {
        return detaDto;
    }

    public void setDetaDto(ProcesoDetaDto detaDto) {
        this.detaDto = detaDto;
    }

    public String getKeyDetalleEntidad() {
        return keyDetalleEntidad;
    }

    public void setKeyDetalleEntidad(String keyDetalleEntidad) {
        this.keyDetalleEntidad = keyDetalleEntidad;
    }

    public String getTituloDetalle() {
        return tituloDetalle;
    }

    public void setTituloDetalle(String tituloDetalle) {
        this.tituloDetalle = tituloDetalle;
    }

    public List<CentroCostosDto> getListaCentroCosto() throws DAOException{
        CentroCostosManager centroCostosManager = (CentroCostosManager) WebServletContextListener.getApplicationContext().getBean("centroCostosManager");
        this.listaCentroCosto = centroCostosManager.obtenerActivos();
        return this.listaCentroCosto;
    }

    public void setListaCentroCosto(List<CentroCostosDto> listaCentroCosto) {
        this.listaCentroCosto = listaCentroCosto;
    }

    public List<PuestoTrabajoDto> getListaPuestoTrabajo() throws DAOException{
        PuestoTrabajoManager puestoTrabajoManager = (PuestoTrabajoManager) WebServletContextListener.getApplicationContext().getBean("puestoTrabajoManager");
        this.listaPuestoTrabajo = puestoTrabajoManager.obtenerActivos();
        return this.listaPuestoTrabajo;
    }

    public void setListaPuestoTrabajo(List<PuestoTrabajoDto> listaPuestoTrabajo) {
        this.listaPuestoTrabajo = listaPuestoTrabajo;
    }

    public List<UtillajeDto> getListaUtillaje() throws DAOException{
        UtillajeManager utillajeManager = (UtillajeManager) WebServletContextListener.getApplicationContext().getBean("utillajeManager");
        this.listaUtillaje = utillajeManager.obtenerActivos();
        return this.listaUtillaje;
    }

    public void setListaUtillaje(List<UtillajeDto> listaUtillaje) {
        this.listaUtillaje = listaUtillaje;
    }
}
